% *******************************************
% SECTION
% ******************************************* 
\section{概述}


缓冲区溢出是程序试图在缓冲区边界之外写入数据导致的。这种漏洞可以被恶意用户利用来改变程序的行为，执行恶意代码。
本实验的目标是让学生对这类漏洞获得更深的理解，并学习如何在攻击中利用这些漏洞。


在这个实验中，学生们将得到四个不同的服务器，每个服务器上都运行一个有缓冲区溢出漏洞的程序。他们的任务是利用这一漏洞最终在这几台服务器上获取root权限。除了攻击外，学生们还将尝试一些针对缓冲区溢出攻击的防范措施，他们需要评估这些方案是否有效，并解释原因。
本实验涵盖了以下主题：

\begin{itemize}[noitemsep]
\item 缓冲区溢出漏洞和攻击
\item 函数调用中的堆栈布局
\item 地址随机化、非执行堆栈和StackGuard
\item Shellcode。我们还有一个单独关于 Shellcode 的实验。
\end{itemize}



\paragraph{参考资料和视频。}
关于缓冲区溢出攻击的详细内容可以参见以下资料：

\begin{itemize}
\item SEED 教科书，第4章，\seedbook
\item Udemy上的 SEED视频，第4节，\seedcsvideo
\end{itemize}


\paragraph{实验环境。} \seedenvironmentC


\paragraph{给教师的注意事项。}
教师可以根据需要改变 L1, ..., L4 的值来定制这个实验。有关详细信息，请参见Section~\ref{sec:vulnerable_program}。
根据学生背景以及分配的时间，教师也可以将Level-2、Level-3和Level-4的任务（或其中一些）设为可选任务。Level-1任务足以涵盖缓冲区溢出攻击的基础知识。从Level 2到Level 4会增加攻击的难度。所有防范措施任务都基于Level-1任务，因此跳过其他 Level 不会影响这些任务。